// List open programs
// By DreamVB 00:06 18/9/2016

#include <iostream>
#include <Windows.h>
#include <psapi.h>

using namespace std;
using std::cout;
using std::endl;

int main(int argc, char *argv[]){
	char pName[MAX_PATH];
	DWORD aProgs[260];
	DWORD cbNeeded;
	DWORD cProcesses;
	HMODULE hMod;

	//Add headers
	cout << "PID    Process" << endl;

	if (EnumProcesses(aProgs, sizeof(aProgs), &cbNeeded)){
		//Process count
		cProcesses = cbNeeded / sizeof(DWORD);

		for (int i = 0; i < cProcesses; i++){
			//Check process id
			if (aProgs[i] != 0){

				HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | 
					PROCESS_VM_READ,FALSE, aProgs[i]);

				if (NULL != hProcess){
					//Check for process
					if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)){
						//Get process name
						GetModuleBaseNameA(hProcess, hMod, pName,
							MAX_PATH);
						//Output the process PID and process name
						cout << aProgs[i] << "   " << pName << endl;
					}
					//Close handle
					CloseHandle(hProcess);
					//GetModuleBaseNameA(h,)
				}
			}
		}
	}
	//Keep console open
	system("pause");
	return 0;
}